#include "MRFSegmentation.h"

class ImageParameters {
public:
    typedef typename Eigen::VectorXd features_vector_t;
    typedef int label_t;    
    typedef typename Eigen::MatrixXd variance_matrix_t;
    
    inline static int getL(){
        return _numberClass;
    }//Number of classes
    inline static int getHeight(){
        return _height;
    } //Image size
    inline static int getWidth(){
        return _width;
    }  //Image size    
    inline static int getN(){
        return _nbFeature;
    } //Number of features
    inline static double getBeta(){
        return _beta;
    } //Homogeneity
    static int _nbFeature;
    static int _height;
    static int _width;
    static int _numberClass;
    static int _beta;
};

class GibbsParameters {
public:
    inline static int getDecreaseTemperature(){
        return _decreaseTemperature;
    }//Number of classes
    inline static double getStopCriterion(){
        return _stop_criterion;
    } //Stop criterion
    inline static int getInitialTemperature(){
        return _initial_temperature;
    } //Image size
    static int _initial_temperature;
    static int _decreaseTemperature;
    static int _stop_criterion;
};

int main(int argc, char* argv[])
{
    srand((unsigned)time(0)); 
    int nbGabor = 4;
    ImageParameters::_nbFeature = nbGabor + 3;
    ImageParameters::_height = 500;
    ImageParameters::_width = 500;
    ImageParameters::_numberClass = 5;
    ImageParameters::_beta = 0.9;
    GibbsParameters::_stop_criterion = 0.05;
    GibbsParameters::_initial_temperature = 4.0;
    GibbsParameters::_decreaseTemperature = 0.95;
    
    MRFSegmentation<MetaParameters> mrf;
}
